#ifndef DOT_META_H
#define DOT_META_H

template <unsigned int N, unsigned cur_N>
struct dot_meta
{
	template <typename vec_type>
	inline static typename vec_type::num_type
	get( const vec_type& a, const vec_type& b )
	{
		return a[cur_N] * b[cur_N] +
			dot_meta<N, cur_N+1>::get( a, b );
	}
};

template <unsigned int N>
struct dot_meta<N, N>
{
	template <typename vec_type>
	inline static typename vec_type::num_type
	get( const vec_type& a, const vec_type& b )
	{ return typename vec_type::num_type(0); }
};

#endif //!< DOT_META_H